﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public abstract class BasePanel<T> : MonoBehaviour where T:class
{
    private static T instance;
    public static T Instance => instance;
    private void Awake()
    {
        //为什么要在Awake中赋值?
        //面板脚本在场景中 只会挂载一次，那么我们可以在这个脚本的生命周期函数的Awake中赋值即可
        instance = this as T;
    }

    /// <summary>
    /// 方便子类继承时 进行初始化操作
    /// 只要在子类中写一些初始化逻辑
    /// 最终都会在Start里面执行
    /// 子类就不需要写start函数了
    /// </summary>
    public abstract void Init();

    protected virtual void Start()
    {
        //初始化 主要用于 监听按钮等事件
        Init();
    }

    /// <summary>
    /// 显示自己
    /// 写成虚函数的目的 方便拓展 可能子类面板 需要在显示 或者隐藏自己时
    /// 处理一些额外操作 那么可以在子类重写即可
    /// </summary>
    public virtual void Show()
    {
        this.gameObject.SetActive(true);
    }
    public virtual void Hide()
    {
        this.gameObject.SetActive(false);
    }
}
